package com.atguigu.bean;

import com.atguigu.dao.UserDao;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

public class AnnotationApplicationContext implements ApplicationContext{


    //创建Map集合，放Bean
    private Map<Class,Object> beanFactory = new HashMap<>();
    private static  String[] rootPath;

    //返回对象
    @Override
    public Object getBean(Class clazz) {
        return beanFactory.get(clazz);
    }

    //创建有参数构造，传递包路径，设置包扫描规则
    //当前包及其子包，哪个类有Bean注解，把这个类反射实例化
    //public AnnotationApplicationContext(String basePackage) throws IOException {
    private static void pathdemo1(String basePackage) throws IOException {
        // com.atguigu

        try {
            //1 把.替换成\
            String packagePath = basePackage.replaceAll("\\.", "\\\\");

            //2 获取包绝对路径
            Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(packagePath);
        while(urls.hasMoreElements()){
            URL url = urls.nextElement();
            String filePath = URLDecoder.decode(url.getFile(),"utf-8");
        }

        } catch (IOException e) {
            throw new IOException(e);
        }
    }

    //包扫描过程，实例化
    private void loadBean(File file) {
        //判断是否文件夹

        //获取文件夹里面所有内容

        //判断文件夹里面为空。直接返回

        //不为空，遍历所有内容

        //遍历得到每个File对象，继续判断，如果还是文件夹，递归

        //遍历得到File对象不是文件夹，是文件，

        //得到包路径+类名称部分-字符串提取

        //判断当前文件类型是否.class

        //如果是.class类型，把路径\替换成.   把.class去掉
        // com.atguigu.service.UserServiceImpl

        //判断类上面是否有注解@Bean， 如果有实例化过程

        //把对象实例化之后，放到map集合beanFactory
    }

    public static void main(String[] args) throws IOException {
        pathdemo1("com.atguigu");
    }


//        public static void main(String[] args) {
//            ApplicationContext context =
//                    new AnnotationApplicationContext("com.atguigu.bean");
//            context.getBean(UserDao.class);
//        }
}
